﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace TMS.formularios
{
    public partial class UImError : System.Web.UI.Page
    {
        static string valorlstErrEncont = ""; //Conserva el valor seleccionado en la lista de errores encontrados para el uso de varias funciones.
        static List<Error> listaErrores = new List<Error>(); //Conserva la lista de errores encontrados por los metodos de busqueda para varias funciones.

        protected void Page_Load(object sender, EventArgs e)
        {
            if (IsPostBack == false)
            {
                //Carga los nombres del enum tipoCriterio en la DropDownList ddCriterio.
                ddCriterio.DataSource = Enum.GetNames(typeof(tipoCriterio));
                ddCriterio.DataBind();
                loadddAAppList();
                //Carga los nombres del enum tipoEstado en la DropDownList ddEstado.
                ddEstado.DataSource = Enum.GetNames(typeof(tipoEstado));
                ddEstado.DataBind();
                //Carga los nombres del enum tipoImportancia en la DropDownList ddImportancia.
                ddImportancia.DataSource = Enum.GetNames(typeof(tipoImportancia));
                ddImportancia.DataBind();

                ddErrorImportancia.DataSource = Enum.GetNames(typeof(tipoImportancia));
                ddErrorImportancia.DataBind();

                ddErrorEstado.DataSource = Enum.GetNames(typeof(tipoEstado));
                ddErrorEstado.DataBind();
            }
        }

        protected void ddCriterio_SelectedIndexChanged(object sender, EventArgs e)
        {
            lstErrEncont.Items.Clear();
            limpiarForm();
            ddMAplicacion.Items.Clear();
            //Cambia el formulario según el criterio seleccionado
            if (ddCriterio.SelectedValue == "Usuario")
            {
                mvCriterio.ActiveViewIndex = 0;
                loadListUsuarios();
            }
            else if (ddCriterio.SelectedValue == "FechaCerrado")
            {
                mvCriterio.ActiveViewIndex = 1;

            }
            else if (ddCriterio.SelectedValue == "FechaCreacion")
            {
                mvCriterio.ActiveViewIndex = 2;
            }
            else if (ddCriterio.SelectedValue == "Importancia")
            {
                mvCriterio.ActiveViewIndex = 3;
            }
            else if (ddCriterio.SelectedValue == "Estado")
            {
                mvCriterio.ActiveViewIndex = 4;
            }
            else if (ddCriterio.SelectedValue == "Modulo")
            {
                mvCriterio.ActiveViewIndex = 5;
                loadAppList();
            }
            else
            {
                mvCriterio.ActiveViewIndex = 6;
                loadddAAppList();
            }
        }
        public void loadListUsuarios() //Carga el drop down ddUsuarios.
        {
            ddUsuarios.Items.Clear();
            ListItem l = new ListItem("Seleccione un Usuario...", "0");
            ddUsuarios.Items.Add(l);
            foreach (Usuario u in Dios.getInstancia().listarUsuariosAll())
            {
                ListItem li = new ListItem("" + u.Nombre, "" + u.NroUsuario);
                ddUsuarios.Items.Add(li);
            }
            ddUsuarios.SelectedIndex = -1;
        }
        public void loadLstErrEncontrados(List<Error> lstErr) //Carga el ListBox lstErrEncont.
        {
           
            lstErrEncont.Items.Clear();
            foreach (Error e in lstErr)
            {
                ListItem l = new ListItem(e.Descripcion + "", "" + e.Id);
                lstErrEncont.Items.Add(l);
            }
            lstErrEncont.SelectedIndex = -1;
        }
        public void loadLstComentarios(List<ComentarioError> lstCom) // Carga el ListBox lstComentarios.
        {
            if (lstCom.Count() != 0)
            {
                lstComentarios.Items.Clear();
                foreach (ComentarioError c in lstCom)
                {
                    ListItem l = new ListItem(c.ToString(), "" + c.Id);
                    lstComentarios.Items.Add(l);
                }
            }
            else
            {
                lstComentarios.Items.Clear();
                ListItem l = new ListItem("No hay comentarios para este error...", "0");
                lstComentarios.Items.Add(l);
            }
            lstComentarios.SelectedIndex = -1;
        }


        protected void btnUBuscar_Click(object sender, EventArgs e)
        {
            if (ddUsuarios.SelectedValue != "0")
            {
                listaErrores = Dios.getInstancia().listarErroresByUsuario(long.Parse(ddUsuarios.SelectedValue));
                loadLstErrEncontrados(listaErrores);
            }
        }
        //---------------------------------
        public void loadAppList() //Carga el dropdown list ddMAplicacion.
        {
            //Carga el DropDownList de Aplicaciones.
            ddMAplicacion.Items.Clear(); // Borra el contenido de la lista de aplicaciones disponibles.;
            ddMAplicacion.Items.Clear();
            ListItem li = new ListItem("Seleccione una Aplicacion...", "0");
            ddMAplicacion.Items.Add(li);
            foreach (Aplicacion ap in Dios.getInstancia().listarApps())
            {
                ListItem l = new ListItem(ap.Nombre, "" + ap.Id);
                ddMAplicacion.Items.Add(l);
            }
            ddMAplicacion.SelectedIndex = 0;
        }
        public void loadDDLModulo(long appId) //Carga el dropdown list ddMModulo.
        {
            ddMModulo.Items.Clear();
            List<Modulo> modlist = Dios.getInstancia().listarModsByAppId(appId);
            //Si la aplicacion contiene modulos...
            if (modlist.Count() != 0)
            {
                ListItem unL = new ListItem("Elija un modulo...", "" + 0);
                ddMModulo.Items.Add(unL);
                foreach (Modulo mo in modlist)
                {
                    ListItem l = new ListItem("" + mo.Nombre, "" + mo.Id);
                    ddMModulo.Items.Add(l);
                }
            }
            else
            {
                //Si no contiene modulos carga un aviso indicandolo en el listbox.
                ListItem unL = new ListItem("La aplicacion no contiene modulos...", "" + 0);
                ddMModulo.Items.Add(unL);
            }
            ddMModulo.SelectedIndex = -1;
        }

        //---------------------------------

        private void limpiarForm() //Limpia el formulario.
        {
            lblErrorID.Text = "";
            //ddErrorAplicacion.Items.Clear();
            //ddErrorModulo.Items.Clear();
            lblErrorAplicacion.Text = "";
            lblErrorModulo.Text = "";
            lstComentarios.Items.Clear();
            txtErrorDescripcion.Text = "";
            txtDetalleComentario.Text = "";
            txtNuevoComentario.Text = "";

        }
        private void eventoCargaForm()
        {
            Error err = Dios.getInstancia().getErrorById(long.Parse(valorlstErrEncont));
            lblErrorID.Text = "" + err.Id;
            //ddErrorAplicacion.SelectedIndex = ddErrorAplicacion.Items.IndexOf(ddErrorAplicacion.Items.FindByValue("" + err.Aplicacion.Id));
            //loadDDLModulo(err.Aplicacion.Id);
            //ddErrorModulo.SelectedIndex = ddErrorModulo.Items.IndexOf(ddErrorModulo.Items.FindByValue("" + err.Modulo.Id));
            lblErrorAplicacion.Text = "" + err.Aplicacion.Nombre;
            lblErrorModulo.Text = "" + err.Modulo.Nombre;
            txtErrorDescripcion.Text = "" + err.Descripcion;
            ddErrorEstado.SelectedIndex = ddErrorEstado.Items.IndexOf(ddErrorEstado.Items.FindByText("" + err.Estado));
            ddErrorImportancia.SelectedIndex = ddErrorImportancia.Items.IndexOf(ddErrorImportancia.Items.FindByText("" + err.Importancia));
            loadLstComentarios(err.LstComentarios);
        }
        protected void lstErrEncont_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (lstErrEncont.SelectedIndex != -1 && lstErrEncont.SelectedValue != "0")
            {
                valorlstErrEncont = lstErrEncont.SelectedValue;
                limpiarForm();
                //Carga los ddl del error.
                //loadAppList();
                eventoCargaForm();
            }
        }

        /* protected void ddErrorAplicacion_SelectedIndexChanged(object sender, EventArgs e)
         {
             loadDDLModulo(long.Parse(ddErrorAplicacion.SelectedValue));
         }*/

        protected void btnModificarError_Click(object sender, EventArgs e)
        {
            long id = long.Parse(lblErrorID.Text);
            /*string apli = ddErrorAplicacion.SelectedItem.Text;
            string mod = ddErrorModulo.SelectedItem.Text;*/
            string des = txtErrorDescripcion.Text;
            string est = ddErrorEstado.SelectedItem.Text;
            string imp = ddErrorImportancia.SelectedItem.Text;
            string usu = "" + Session["idUsuario"];
            Dios.getInstancia().modificarError(id, /*apli, mod,*/ des, imp, est, usu);
            loadLstErrEncontrados(listaErrores);
            limpiarForm();
        }

        protected void btnAgregarComentario_Click(object sender, EventArgs e)
        {
            if (valorlstErrEncont != "")
            {
                string com = txtNuevoComentario.Text;
                long idErr = long.Parse(valorlstErrEncont);
                long idUs = long.Parse("" + Session["idUsuario"]);
                Dios.getInstancia().addComentario(idErr, com, idUs);
                loadLstErrEncontrados(listaErrores);
                txtNuevoComentario.Text = "";
                txtDetalleComentario.Text = "";
                eventoCargaForm();
            }
        }

        protected void btnModificarComentario_Click(object sender, EventArgs e)
        {
            if (lstComentarios.SelectedValue != "")
            {
                long comId = long.Parse(lstComentarios.SelectedValue);
                long errId = long.Parse(lblErrorID.Text);
                string com = txtDetalleComentario.Text;
                Dios.getInstancia().modComentario(errId, comId, com);
                loadLstErrEncontrados(listaErrores);
                txtDetalleComentario.Text = "";
                eventoCargaForm();
            }
        }

        protected void lstComentarios_SelectedIndexChanged(object sender, EventArgs e)
        {
            txtDetalleComentario.Text = "";
            txtNuevoComentario.Text = "";
            ComentarioError ce = Dios.getInstancia().getCommentById(long.Parse(lstComentarios.SelectedValue));
            if (ce != null) //Si la consulta por el id del comentario devuelve un objeto no vacio...
            {
                txtDetalleComentario.Text = "" + ce.Comentario;
            }
        }

        protected void ddUsuarios_SelectedIndexChanged1(object sender, EventArgs e)
        {
            lstErrEncont.Items.Clear(); // Limpia la lista de errores encontrados.
            limpiarForm(); //Si cambia el usuario seleccionado, limpia el formulario para la nueva busqueda.
        }

        protected void btnCerradoBuscar_Click(object sender, EventArgs e)
        {
            DateTime fech1 = calCerradoDesde.SelectedDate;
            DateTime fech2 = calCerradoHasta.SelectedDate;
            if (fech1 != null && fech2 != null && fech1 != fech2)
            {
                listaErrores = Dios.getInstancia().getLstErrByFechCerr(fech1, fech2);
                loadLstErrEncontrados(listaErrores);
            }
        }

        protected void btnCreadoBuscar_Click(object sender, EventArgs e)
        {
            DateTime fech1 = calCreadoDesde.SelectedDate;
            DateTime fech2 = calCreadoHasta.SelectedDate;
            if (fech1 != null && fech2 != null && fech1 != fech2)
            {
                listaErrores = Dios.getInstancia().getLstErrByFechCre(fech1, fech2);
                loadLstErrEncontrados(listaErrores);
            }
        }

        protected void btnIBuscar_Click(object sender, EventArgs e)
        {
            listaErrores = Dios.getInstancia().getLstErrByImportancia("" + ddImportancia.SelectedItem);
            loadLstErrEncontrados(listaErrores);
        }

        protected void btnEBuscar_Click(object sender, EventArgs e)
        {
            listaErrores = Dios.getInstancia().getLstErrByEstado("" + ddEstado.SelectedItem);
            loadLstErrEncontrados(listaErrores);
        }

        protected void ddEstado_SelectedIndexChanged(object sender, EventArgs e)
        {
            lstErrEncont.Items.Clear(); // Limpia la lista de errores encontrados.
            limpiarForm(); //Si cambia el usuario seleccionado, limpia el formulario para la nueva busqueda.
        }

        protected void ddImportancia_SelectedIndexChanged(object sender, EventArgs e)
        {
            lstErrEncont.Items.Clear(); // Limpia la lista de errores encontrados.
            limpiarForm(); //Si cambia el usuario seleccionado, limpia el formulario para la nueva busqueda.
        }

        protected void ddMAplicacion_SelectedIndexChanged1(object sender, EventArgs e)
        {
            if (ddMAplicacion.SelectedValue != "0")
            {
                loadDDLModulo(long.Parse(ddMAplicacion.SelectedValue));
            }
            lstErrEncont.Items.Clear();
            limpiarForm();
        }

        protected void btnMBuscar_Click1(object sender, EventArgs e)
        {
            if (ddMModulo.SelectedValue != "0")
            {
                listaErrores = Dios.getInstancia().getLstErrByModId(long.Parse(ddMModulo.SelectedValue));
                loadLstErrEncontrados(listaErrores);
            }
        }

        protected void ddMModulo_SelectedIndexChanged(object sender, EventArgs e)
        {
            lstErrEncont.Items.Clear();
            limpiarForm();
        }

        protected void ddAAplicacion_SelectedIndexChanged(object sender, EventArgs e)
        {
            lstErrEncont.Items.Clear();
            limpiarForm();
        }

        protected void btnABuscar_Click(object sender, EventArgs e)
        {
            if (ddAAplicacion.SelectedValue != "0")
            {
                listaErrores = Dios.getInstancia().getLstErrByAppId(long.Parse(ddAAplicacion.SelectedValue));
                loadLstErrEncontrados(listaErrores);
            }
        }
        public void loadddAAppList() //Carga el dropdown list ddAAplicacion.
        {
            //Carga el DropDownList de Aplicaciones.
            ddAAplicacion.Items.Clear(); // Borra el contenido de la lista de aplicaciones disponibles.;
            ListItem li = new ListItem("Seleccione una Aplicacion...", "0");
            ddAAplicacion.Items.Add(li);
            foreach (Aplicacion ap in Dios.getInstancia().listarApps())
            {
                ListItem l = new ListItem(ap.Nombre, "" + ap.Id);
                ddAAplicacion.Items.Add(l);
            }
            ddAAplicacion.SelectedIndex = 0;
        }
    }
}